package com.cn.bulu.utils.jpush.example;
import java.util.HashMap;
import java.util.Map;

import com.cn.bulu.utils.jpush.api.ErrorCodeEnum;
import com.cn.bulu.utils.jpush.api.IOSExtra;
import com.cn.bulu.utils.jpush.api.JPushClient;
import com.cn.bulu.utils.jpush.api.MessageResult;


public class JPushClientExample {
    //在极光注册上传应用的 appKey 和 masterSecret  工人版
	private static final String appKey ="3e77ad1648b09e2ec3cc0c01";////必填，例如466f7032ac604e02fb7bda89
	
	private static final String masterSecret = "9acdbbf17b76fa4dc5c74336";//必填，每个应用都对应一个masterSecret
	
	private static JPushClient jpush = null;
	//鹿客帮appKey和 masterSecret
	private static final String appKeyLukebang = "a34fb7ab904c8615fc359202";
	
	private static final String masterSecretLukebang = "4b332fb9252c503b0aec5aa5";
	/*
	 * 保存离线的时长。秒为单位。最多支持10天（864000秒）。
	 * 0 表示该消息不保存离线。即：用户在线马上发出，当前不在线用户将不会收到此消息。
	 * 此参数不设置则表示默认，默认为保存1天的离线消息（86400秒
	 */
	private static long timeToLive =  60 * 60 * 24;  

	public static void main(String[] args) {
		/*
		 * Example1: 初始化,默认发送给android和ios，同时设置离线消息存活时间
		 * jpush = new JPushClient(masterSecret, appKey, timeToLive);
		 * 
		 * Example2: 只发送给android
		 * jpush = new JPushClient(masterSecret, appKey, DeviceEnum.Android);
		 * 
		 * Example3: 只发送给IOS
		 * jpush = new JPushClient(masterSecret, appKey, DeviceEnum.IOS);
		 * 
		 * Example4: 只发送给android,同时设置离线消息存活时间
		 * jpush = new JPushClient(masterSecret, appKey, timeToLive, DeviceEnum.Android);
		 */
 		jpush = new JPushClient(masterSecret, appKey, timeToLive);
 		
		/* 
		 * 是否启用ssl安全连接, 可选
		 * 参数：启用true， 禁用false，默认为非ssl连接
		 */
		jpush.setEnableSSL(true);
		testSend();
		//测试发送消息或者通知
		toSendLukebang("512154","我试试可以不","你看这是啥");
	}

	private static void testSend() {
	    // 在实际业务中，建议 sendNo 是一个你自己的业务可以处理的一个自增数字。
	    // 除非需要覆盖，请确保不要重复使用。详情请参考 API 文档相关说明。
//	    Integer num= getRandomSendNo();
	    String sendNo="571245775";
		String msgTitle = "jpush,TEST\"\"";
		String msgContent = "安卓与IOS推送TEST";
		
		/*
		 * IOS设备扩展参数,
		 * 设置badge，设置声音
		 */

		Map<String, Object> extra = new HashMap<String, Object>();
//		IOSExtra iosExtra = new IOSExtra(1, "这是个什么鬼!!!");
//		extra.put("ios", iosExtra);
//		extra.put("", value);
		//IOS和安卓一起
//		MessageResult msgResult = jpush.sendNotificationWithAppKey(sendNo, msgTitle, msgContent, 0, extra);
		MessageResult msgResult = jpush.sendCustomMessageWithAppKey(sendNo,msgTitle,msgContent,"0",extra);
		//对所有用户发送通知, 更多方法请参考文档
	//	MessageResult msgResult = jpush.sendCustomMessageWithAppKey(sendNo,msgTitle, msgContent);
		
		if (null != msgResult) {
			System.out.println("服务器返回数据: " + msgResult.toString());
			if (msgResult.getErrcode() == ErrorCodeEnum.NOERROR.value()) {
				System.out.println("发送成功， sendNo=" + msgResult.getSendno());
			} else {
				System.out.println("发送失败， 错误代码=" + msgResult.getErrcode() + ", 错误消息=" + msgResult.getErrmsg());
			}
		} else {
			System.out.println("无法获取数据");
		}
		
		
	}
	/**\
	 * 给工人推送
	 * @param sendNo  我也不知道  可能是个唯一标识
	 * @param msgTitle	推送标题
	 * @param msgContent	推送内容
	 * @param extra		附带的内容  前端解析的
	 * @return
	 */
	public static void testSend(String sendNo,String msgTitle,String msgContent,String msgContentType,Map<String, Object> extra) {
		System.out.println(sendNo+"---"+msgTitle+"---"+msgContent+"----"+extra);
	    // 在实际业务中，建议 sendNo 是一个你自己的业务可以处理的一个自增数字。
	    // 除非需要覆盖，请确保不要重复使用。详情请参考 API 文档相关说明。
//	    Integer num= getRandomSendNo();
//	    String sendNo="1900192560";
//		String msgTitle = "jpush,TEST\"\"";
//		String msgContent = "安卓与IOS推送TEST";
		
		/*
		 * IOS设备扩展参数,
		 * 设置badge，设置声音
		 */

//		Map<String, Object> extra = new HashMap<String, Object>();
		IOSExtra iosExtra = new IOSExtra("default");
		extra.put("ios", iosExtra);
		jpush = new JPushClient(masterSecret, appKey, timeToLive);
		/* 
		 * 是否启用ssl安全连接, 可选
		 * 参数：启用true， 禁用false，默认为非ssl连接
		 */
		jpush.setEnableSSL(false);
		//IOS和安卓一起
//		MessageResult msgResult = jpush.sendNotificationWithAppKey(sendNo, msgTitle, msgContent, 0, extra);
//		System.out.println(sendNo+"--------------");
		MessageResult msgResult = jpush.sendCustomMessageWithAppKey(sendNo,msgTitle,msgContent,msgContentType,extra);
//		MessageResult msgResult = jpush.sendNotificationWithAppKey(sendNo, msgTitle, msgContent, 0, extra);
		//对所有用户发送通知, 更多方法请参考文档
	//	MessageResult msgResult = jpush.sendCustomMessageWithAppKey(sendNo,msgTitle, msgContent);
		
		if (null != msgResult) {
			System.out.println("服务器返回数据: " + msgResult.toString());
			if (msgResult.getErrcode() == ErrorCodeEnum.NOERROR.value()) {
				System.out.println("发送成功， sendNo=" + msgResult.getSendno());
			} else {
				System.out.println("发送失败， 错误代码=" + msgResult.getErrcode() + ", 错误消息=" + msgResult.getErrmsg());
			}
		} else {
			System.out.println("无法获取数据");
		}
	}
	//给鹿客帮推送
	public static void toSendLukebang(String sendNo,String msgTitle,String msgContent){
		jpush = new JPushClient(masterSecretLukebang, appKeyLukebang, timeToLive);
		/* 
		 * 是否启用ssl安全连接, 可选
		 * 参数：启用true， 禁用false，默认为非ssl连接
		 */
		jpush.setEnableSSL(true);
		Map<String, Object> extra = new HashMap<String, Object>();
		IOSExtra iosExtra = new IOSExtra("happy");
		extra.put("ios", iosExtra);
		System.out.println(extra+"--------------");
		//IOS和安卓一起
		MessageResult msgResult = jpush.sendNotificationWithAppKey(sendNo, msgTitle, msgContent, 0, extra);
//		MessageResult msgResult = jpush.sendNotificationWithAppKey(sendNo,msgTitle,msgContent);
//		MessageResult msgResult = jpush.sendCustomMessageWithAppKey(sendNo,msgTitle,msgContent,"NOTIFY",extra);
		//对所有用户发送通知, 更多方法请参考文档
	//	MessageResult msgResult = jpush.sendCustomMessageWithAppKey(sendNo,msgTitle, msgContent);
		
		if (null != msgResult) {
			System.out.println("服务器返回数据: " + msgResult.toString());
			if (msgResult.getErrcode() == ErrorCodeEnum.NOERROR.value()) {
				System.out.println("发送成功， sendNo=" + msgResult.getSendno());
			} else {
				System.out.println("发送失败， 错误代码=" + msgResult.getErrcode() + ", 错误消息=" + msgResult.getErrmsg());
			}
		} else {
			System.out.println("无法获取数据");
		}
	}
    public static final int MAX = Integer.MAX_VALUE;
	public static final int MIN = (int) MAX/2;
	
	/**
	 * 保持 sendNo 的唯一性是有必要的
	 * It is very important to keep sendNo unique.
	 * @return sendNo
	 */
	public static int getRandomSendNo() {
	    return (int) (MIN + Math.random() * (MAX - MIN));
	}
	
}
